#include "stdafx.h"
#include "segmento.h"
#include "color.h"
//--------------------------------------------------------------------------------------------/

segmento::segmento(SDL_Surface* screen) :figura(screen) {}
//--------------------------------------------------------------------------------------------/

segmento::segmento(punto puntoInicial, punto puntoFinal, SDL_Surface* screen) :figura(screen), puntoInicial(puntoInicial), puntoFinal(puntoFinal) {}
//--------------------------------------------------------------------------------------------/

punto& segmento::getPuntoInicial()
{
	return puntoInicial;
}
//--------------------------------------------------------------------------------------------/

void segmento::setPuntoInicial(punto pInicial)
{
	this->puntoInicial = pInicial;
}
//--------------------------------------------------------------------------------------------/

void segmento::setPuntoFinal(punto pFinal)
{
	this->puntoFinal = pFinal;
}
//--------------------------------------------------------------------------------------------/

punto& segmento::getPuntoFinal()
{
	return puntoFinal;
}
//--------------------------------------------------------------------------------------------/



//funcion para dibujar una linea
void graficarLineaSegmento(SDL_Surface* screen, punto puntoInicial, punto puntoFinal,color color)
{
	punto unPunto;
	int errorEnX,errorEnY, tamanio, cantidad,
	VerX, VerY, xInicial, yInicial, xFinal, yFinal,diferencialX, diferencialY;

	xInicial = (int)puntoInicial.getX();
	xFinal = (int)puntoFinal.getX();
	yInicial = (int)puntoInicial.getY();
	yFinal =(int) puntoFinal.getY();

	diferencialX = xFinal - xInicial;
	diferencialY = yFinal - yInicial;

	if (diferencialX > 0)
		VerX = 1;
	else if (diferencialX == 0)
		VerX = 0;
	else
		VerX = -1;

	if (diferencialY > 0)
		VerY = 1;
	else if (diferencialY == 0)
		VerY = 0;
	else
		VerY = -1;

	diferencialX = abs(diferencialX);
	diferencialY = abs(diferencialY);

	if (diferencialX > diferencialY)
		tamanio = diferencialX;
	else
		tamanio = diferencialY;

	errorEnX = 0;
	errorEnY = 0;

	for (cantidad = 0; cantidad <= tamanio+1; cantidad++)
	{

		unPunto.ponerUnPixel(screen, xInicial, yInicial, color);

		errorEnX =errorEnX + diferencialX;
		errorEnY =errorEnY + diferencialY;

		if (errorEnX > tamanio)
		{
			xInicial = xInicial + VerX;
			errorEnX =errorEnX - tamanio;

		}
		if (errorEnY > tamanio) 
		{
			yInicial = yInicial + VerY;
			errorEnY =errorEnY- tamanio;

		}
	}
}

//--------------------------------------------------------------------------------------------/


void segmento::graficar()
{
	graficarLineaSegmento(screen,puntoInicial,puntoFinal,colorBordeGrafico);
}
//--------------------------------------------------------------------------------------------/


segmento::~segmento() {}
//--------------------------------------------------------------------------------------------/
